//实现一个简单的curl程序
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func init() {
	if len(os.Args) != 2 {
		fmt.Println("Usage: ./example2 <url>")
		os.Exit(-1)
	}
}

func main() {
	/*
		http.Get函数会返回一个http.Response类型的指针。
		http.Response类型包含一个名为Body的字段，
		这个字段是一个io.ReadCloser接口类型的值。
	*/
	r, err := http.Get(os.Args[1])
	if err != nil {
		fmt.Println(err)
		return
	}
	//从Body复制到Stdout
	/*
		io.Copy的第一个参数是复制到的目标，这个参数必须是一个实现了io.Writer接口的值。
		对于这个目标，我们传入了os包里的一个特殊值Stdout。
		这个接口值表示标准输出设备，并且已经实现了io.Writer接口。
		当我们将Body和Stdout这两个值传给io.Copy函数后，这个函数会把服务器的数据分成小段，源源不断地传给终端窗口，
		直到最后一个片段读取并写入终端，io.Copy函数才返回。
	*/
	written, err2 := io.Copy(os.Stdout, r.Body)
	fmt.Println("\nWrite: ", written)
	fmt.Println("ERR2:", err2)
	if err := r.Body.Close(); err != nil {
		fmt.Println(err)
	}
}
